Unity Linear Workflow
Unityで3Dシーンのルックがイマイチで、直そうとしても直せない時にはおそらくリニアワークフローを知ると良い、という話。
リニアワークフローを使う
https://gyazo.com/a307419c37edc91649545c7b68183810
ブラウン管のディスプレイを使っていた頃、電圧と色は2.2という数字(1/2.2=0.4545..)で変換を行う必要があった。
3Dエンジン、CGのツールでの作業結果をモニタ出力する際にはガンマ補正が行われる。
ガンマを扱うためにテクスチャやライトにガンマの設定を入れることはあるが、作業を行っているあいだは「リニアワークフロー」というやり方を行うべきである。
https://gyazo.com/c0e72523cc2e4b7cd2a61a25f8d41cb4
もしリニアとガンマをきちんと意識しないと、以下のような問題が起きる。
シーン全体でガンマ補正を行う時に、すでにガンマ補正済のテクスチャがさらにガンマ補正され、白飛びしたルックになる(明るくなりすぎる)
ライト・GI(グローバルイルミネーション)での減衰(逆二乗の法則)が暗くなりすぎて、全体が暗いのに一部分が不自然に明るすぎるシーンになる
シーン全体のルックがイマイチで、ライトやシェーダーをいじってもますますルックが悪くなる場合は、おそらくリニアワークフローができていない。
Unityでは、以下のSettingsで設定を行い、リニアワークフローで作業のやり方を統一すると良い。
Color SpaceでLinearを選ぶ。
Player Settings
https://docs.unity3d.com/ja/2018.1/uploads/Main/LinearRendering-ColorSpaceSetting.png
テクスチャについてはsRGBのチェックを外す。
Texture Import Settings
https://gyazo.com/a97f160365c3522f037f508c1df475a0
テクスチャはt:Textureでアセット検索できる
https://gyazo.com/d503fd5b5e9fec932fceb95e3db4cf50
テクスチャのsRGBを一括でチェックを外すエディタ拡張(を書きたい)
code:DisableSrgb.cs
// インポート時になんか設定する
class SrgbModifier : AssetPostprocessor {
void OnPreprocessTexture() {
var importer = (assetImporter as TextureImporter);
importer.textureType = TextureImporterType.Sprite;
}
}
ベイクするテクスチャはGenerate Mip Mapsのチェックを入れる
https://gyazo.com/1c2e8b611e82e7c918c42d920d49dbc1